/*
 * Created on Jan 6, 2005
 *
 */

package cn.org.rapid_framework.generator.provider.db.table.model;

import cn.org.rapid_framework.generator.util.ListHashtable;

/**
 * @author Richard
 * This class contains a list of all the tables for which foreign keys
 * exist for the containing SqlTable. It contains a reference to the parent
 * and also a Hashtable of foreign keys for each table 
 * 
 */
public class ForeignKeys implements java.io.Serializable {

    protected Table parentTable; // 宿主表
    protected ListHashtable associatedTables;

    /**
     * Constructor for Foreign Keys
     */
    public ForeignKeys(Table aTable) {

	super();
	parentTable = aTable;
	associatedTables = new ListHashtable();
    }

    /**
     * @param tableName
     * @param columnName
     * @param seq
     */
    public void addForeignKey(String tableName, String columnName, String parentColumn, Integer seq) {

	ForeignKey tbl = null;
	if (associatedTables.containsKey(tableName)) {
	    tbl = (ForeignKey) associatedTables.get(tableName);
	} else {
	    tbl = new ForeignKey(parentTable, tableName);
	    associatedTables.put(tableName, tbl);
	}

	tbl.addColumn(columnName, parentColumn, seq);
    }

    /**
     * @return Returns the associatedTables.
     */
    public ListHashtable getAssociatedTables() {

	return associatedTables;
    }

    public int getSize() {

	return getAssociatedTables().size();
    }

    public boolean getHasImportedKeyColumn(String aColumn) {

	boolean isFound = false;
	int numKeys = getAssociatedTables().size();
	for (int i = 0; i<numKeys; i++) {
	    ForeignKey aKey = (ForeignKey) getAssociatedTables().getOrderedValue(i);
	    if (aKey.getHasImportedKeyColumn(aColumn)) {
		isFound = true;
		break;
	    }
	}
	return isFound;
    }

    public ForeignKey getAssociatedTable(String name) {

	Object fkey = getAssociatedTables().get(name);
	if (fkey!=null) {
	    return (ForeignKey) fkey;
	} else
	    return null;
    }

    /**
     * @return Returns the parentTable.
     */
    public Table getParentTable() {

	return parentTable;
    }

    public boolean getHasImportedKeyParentColumn(String aColumn) {

	boolean isFound = false;
	int numKeys = getAssociatedTables().size();
	for (int i = 0; i<numKeys; i++) {
	    ForeignKey aKey = (ForeignKey) getAssociatedTables().getOrderedValue(i);
	    if (aKey.getHasImportedKeyParentColumn(aColumn)) {
		isFound = true;
		break;
	    }
	}
	return isFound;
    }

    public ForeignKey getImportedKeyParentColumn(String aColumn) {

	ForeignKey aKey = null;
	int numKeys = getAssociatedTables().size();
	for (int i = 0; i<numKeys; i++) {
	    aKey = (ForeignKey) getAssociatedTables().getOrderedValue(i);
	    if (aKey.getHasImportedKeyParentColumn(aColumn)) {
		break;
	    }
	}
	return aKey;
    }
}
